package com.mjf.scala.chapter11

/**
 * 泛型
 */
object Scala01_TestGeneric {
  def main(args: Array[String]): Unit = {

//    val s1: MyList[Child] = new MyList[Child]()
//    val s2: MyList[Child] = new MyList[Parent]()
//    val s3: MyList[Child] = new MyList[SubChild]()

    test(classOf[Child])
//    test(classOf[Parent])
    test(classOf[SubChild])

  }

  // 泛型通配符  表示A为Child或者Child父类(下界)
/*  def test[A >: Child](a: Class[A]): Unit = {
    println(a)
  }*/

  // 泛型通配符  表示A为Child或者Child子类(上界)
  def test[A <: Child](a: Class[A]): Unit = {
    println(a)
  }

/*  def test[A >: Child](a: A): Unit = {

  }*/

}

class Parent {}
class Child extends Parent {}
class SubChild extends Child {}

// 泛型模板
// 不可变性：可以放当前类型
//class MyList[T] {}

// 协变：可以放当前类型和子类型
//class MyList[+T] {}

// 逆变：可以放当前类型和父类型
//class MyList[-T] {}

